10.- Servidor web
1.- Maquinari
Si volem enviar les dades del projecte a un servidor web o controlar els automatismes de forma remota ens cal la targeta Ethernet per Arduino.
Aquesta targeta es connecta a la Arduino UNO i permet posar-hi tots els sensors que volien posar a la UNO sobre la Ethernet doncs hi ha correspondència entre cada port de les dues targetes.
2. Esquema elèctric de l'exemple.
Anem a veure com enviar les dades del sensor de Temperatura NTC que hem fet a la secció 4.2 via web a qualsevol client que es connecte.
El esquema elèctric ja l'hem vist a la secció esmentada i és aquest, que connectarem a la targeta Ethernet acoblada a la UNO.
3. Programa exemple
Ara posem el cable d'Internet a la targeta Ethernet i carreguem el programa webserver de la llista d'exemples d'Arduino i el modifiquem per adaptar-lo al sensor de Temperatura nostre.
Codi font del programa: WebServer_Termometre.zip
// Sensor de temperatura remot des d'un servidor web
// creat (18 Dec 2009): David A. Mellis
// modificat (4 Sep 2010) : Tom Igoe
// modificat (7 dec 2011): C. Ferrando
#include <SPI.h> //llibreria microcontroladors
#include <Ethernet.h> //libreria comunicacions xarxa
#include <stdio.h> //llibreria estandard
#include <math.h> //libreria de funcions matematiques
IPAddress ip(192,168,1,15);//Adreça IP fixa
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x64, 0xE3 }; //adreça MAC
//Inicialitzem la llibreria Ethernet amb IP pel port 80:
EthernetServer server(80);
//Definició de coeficients i constants
float Ventrada=5.0; // [V] Tensió d'entrada al divisor de tensió
float Rauxiliar=10000; // [ohm] Resistència secundaria al divisor de tensió.
float R0=10000; // [ohm] Valor de NTC nominal a 25ºC
float T0=298.15; // [K] (25ºC) Valor en ºK de 25ºC
float beta=3891; // [K] Paràmetre B
float Rinfinit=0.0214906446; // [ohm] Paràmetre Rinfinit
//Definicio de variables
float Veixida=0.0; // [V] Tensió donada pel divisor de tensió
float RNTC=0.0; // [ohm] Resistència del NTC
float TempK=0.0; // [K] Temperatura d'eixida en Kelvin
float TempC=0.0; // [ºC] Temperatura d'eixida en Celsius
int LecturaNTC = 3; // selecciona el pin d'entrada per al sensor de calor
void setup()
{
// Iniciem la connexió Ethernet i el servdor:
Ethernet.begin(mac, ip);
server.begin();
pinMode(LecturaNTC, INPUT); //Configuració del pin d'entrada
}
void loop()
{
// Escoltem clients d'entrada
EthernetClient client = server.available();
if (client) {
// una petició http acaba amb linia en blanc
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// Si heu anat al final de la linia (heu rebut un caracter linia nova)
// i la linia es en blanc, la petició ha acabat,
// ara podeu enviar una resposta
if (c == ' ' && currentLineIsBlank) {
// s'està enviant una capçalera de resposta http
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// eixida amb els valors dels sensors analogics i alguns càlculs del programa
Veixida=Ventrada*((analogRead(LecturaNTC))/1024.0); //Càlcul del valor de voltatge del NTC ara
RNTC=(Rauxiliar*Veixida/(Ventrada-Veixida)); //Càlcul del valor la Resistencia del NTC ara
TempK=(beta/log(RNTC/Rinfinit)); //Càlcul de la temperatura estimada de SteinHart-Hart en Kelvins
TempC=TempK-273.15; //Càlcul de la temperatura estimada en Centigrads
client.print("Temperatura (C)="); //imprimeix el retol en la web del client
client.print(TempC); //imprimeix la variable TempC en centigrads en la web del client
break;
}
if (c == ' ') {
// esteu començant una nova linia
currentLineIsBlank = true;
}
else if (c != '\r') {
// heu obtés un caracter en la línia actual
currentLineIsBlank = false;
}
}
}
// deixem temps al servidor per rebre les dades
delay(1);
// tanquem la connexió
client.stop();
}
}
|
En el vostre programa caldrà modificar la adreça MAC de la targeta Ethernet per posar la de la vostra targeta, mireu la enganxina que té a sota i copieu el codi.
També caldrà modificar la IP a fixar per al vostre router, mireu que la IP que poseu estiga en rang que dona els vostre router i no estiga ocupada.
Si anem a cercar un altre ordinador podrem provar la Ip que hem fixat per veure si funciona, i premer recarrega la pàgina per veure com varia a cada clic.
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0